import { useState } from 'react';
import produce from "immer";

import useRequest from 'hook/useRequest';

export default function useRequestList(
    fn,
    initialParams = { page: 1, pageSize: 10, updateTime: new Date().getTime() },
) {
    const [params, setParams] = useState(initialParams);
    const {
        request, // 封装的请求方法
        cancel, // 取消请求的方法
        data, // 请求结果数据
        loading, // loading状态
        status, // 请求状态
    } = useRequest(fn);
    const page = params.page; // 当前页码
    const pageSize = params.pageSize; // 每页条数
    const updateTime = params.updateTime; // 更新时间
    const total = data?.total || 0; // 总条数
    const list = data?.list || []; // 当前列表
    const count = Math.ceil(data?.total / pageSize); // 总页数

    // 请求数据,接收额外的参数
    const requestList = function (p) {
        return request({ ...params, ...p })
    }
    // 下一页
    const nextPage = function () {
        if (params.page * params.pageSize >= data.total) {
            return;
        }
        setParams(
            produce((draft) => {
                draft.page = draft.page + 1;
                draft.updateTime = new Date().getTime();
            })
        );
    }
    // 上一页
    const lastPage = function () {
        if (params.page <= 1) {
            return;
        }
        setParams(
            produce((draft) => {
                draft.page = draft.page - 1;
                draft.updateTime = new Date().getTime();
            })
        );
    }
    // 跳转到指定页
    const go = function (page) {
        setParams(
            produce((draft) => {
                draft.page = page;
                draft.updateTime = new Date().getTime();
            })
        );
    }
    return {
        request, // 请求方法 
        cancel, // 取消请求
        loading, // 加载状态
        status, // 请求状态
        data, // 返回数据

        page, // 当前页码
        pageSize, // 每页条数
        updateTime, // 更新时间
        total, // 总条数
        list, // 列表
        count, // 总页数

        requestList, // 请求列表方法
        nextPage, // 下一页
        lastPage, // 上一页
        go, // 页码跳转
    }

}